/**
 * 3η ΓΕ 2013-2014 - Super Market
 * ΦΡΑΓΚΟΥΛΟΠΟΥΛΟΥ ΕΜΜΑΝΟΥΕΛΑ (69298)
 * ΧΑΛΔΑΣ ΧΑΡΑΛΑΜΠΟΣ (69305)
 * ΧΟΡΜΟΒΙΤΗΣ ΙΩΑΝΝΗΣ (69325)
 * ΧΟΥΣΤΟΥΛΑΚΗ ΕΥΑΓΓΕΛΙΑ (69327)
 */
package simulation;

import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JTextArea;

/**
 * Class Ελέγχου των Νημάτων
 */
public class Controler {

    private JTextArea resultsTextArea;
    private List<xmlRecord> recordsList;

    public List<xmlRecord> getRecordsList() {
        return recordsList;
    }
    
    public Controler () {
        
    }
    /*
    * Έναρξη προσομοίωσης Αγορών
    */
    public void start (int numOfCustomers, JTextArea resultsTextArea) {
        this.resultsTextArea = resultsTextArea;
        CCAuthority ccAuthority = new CCAuthority();
        PurchaseThread threads[] = new PurchaseThread[numOfCustomers];
        
        
        // Δημιουργία Νημάτων
        for (int i=0; i<numOfCustomers; i++) {
            PurchaseThread thread = new  PurchaseThread(ccAuthority, resultsTextArea, i+1);
            threads[i] = thread;
            thread.start();       
        }
        
        // Αναμονή για τερματισμό των νημάτων
        for (int i=0; i<numOfCustomers; i++) {
            PurchaseThread thread = (PurchaseThread) threads[i];
            try {        
                thread.join();
            } 
            catch (InterruptedException ex) {
                Logger.getLogger(Controler.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        
        updateTextArea ("ΤΕΡΜΑΤΙΣΜΟΣ ΠΡΟΣΟΜΟΙΩΣΗΣ\n");
        
        recordsList = new ArrayList<>();
        for (PurchaseThread thread : threads) {
            recordsList.add(thread.getRecord());
        }
    }
    
    public void updateTextArea (String newText) {
        
        resultsTextArea.append(newText + "\n");
    }
    
}
